图表问题
原因
Chart主题
源码修改
......
import java.awt.RenderingHints;
import org.jfree.chart.StandardChartTheme;
......
private static JFreeChart createChart(PieDataset dataset) {
StandardChartTheme theme = new StandardChartTheme("unicode") {
public void apply(JFreeChart chart) {
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
super.apply(chart); // 应用消除文字锯齿
}
};
theme.setExtraLargeFont(new Font("SansSerif", Font.PLAIN, 20)); // 设置逻辑字体
theme.setLargeFont(new Font("SansSerif", Font.PLAIN, 14)); // 设置逻辑字体
theme.setRegularFont(new Font("SansSerif", Font.PLAIN, 12)); // 设置逻辑字体
theme.setSmallFont(new Font("SansSerif", Font.PLAIN, 10)); // 设置逻辑字体
ChartFactory.setChartTheme(theme); // 设置新主题
JFreeChart chart = ChartFactory.createPieChart(
"Some Unicode Text in the Title : \u4E76", // chart title test
dataset);
System.out.println(chart.getTitle().getFont()); // debug 字体输出
return chart;
}
package org.adempiere.apps.graph;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;
public class test extends ApplicationFrame {
public test(String title) {
super(title);
setContentPane(createDemoPanel());
}
private static PieDataset createDataset() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("苹果", new Double(27.8));
dataset.setValue("Others", new Double(55.3));
dataset.setValue("Nokia", new Double(16.8));
dataset.setValue("Apple", new Double(17.1));
return dataset;
}
private static JFreeChart createChart(PieDataset dataset) {
StandardChartTheme theme = new StandardChartTheme("unicode") ;
theme.setExtraLargeFont(new Font("SansSerif", Font.PLAIN, 20));
theme.setLargeFont(new Font("SansSerif", Font.PLAIN, 14));
theme.setRegularFont(new Font("SansSerif", Font.PLAIN, 12));
theme.setSmallFont(new Font("SansSerif", Font.PLAIN, 10));
ChartFactory.setChartTheme(theme);
JFreeChart chart = ChartFactory.createPieChart(
"Some Unicode Text in the Title : \u4E76", // chart title
dataset);
// 如果不添加主题,返回Tahoma字体乱码,如果添加主题,返回逻辑字体 SansSerif
// 测试java.awt.font的字体集
java.awt.GraphicsEnvironment eq = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontNames = eq.getAvailableFontFamilyNames();
for(int i=0;i<fontNames.length;i++){
System.out.println(fontNames[i]);
}
// 测试标题字体
System.out.println(chart.getTitle().getFont());
return chart;
}
public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
chart.setPadding(new RectangleInsets(4, 8, 2, 2));
ChartPanel panel = new ChartPanel(chart);
panel.setMouseWheelEnabled(true);
panel.setPreferredSize(new Dimension(600, 300));
return panel;
}
public static void main(String[] args) {
test demo = new test("JFreeChart Unicode Test");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}